package com.my.blog.config;

import cn.dev33.satoken.interceptor.SaAnnotationInterceptor;
import cn.dev33.satoken.interceptor.SaRouteInterceptor;
import cn.dev33.satoken.router.SaRouter;
import cn.dev33.satoken.secure.SaSecureUtil;
import cn.dev33.satoken.stp.StpUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

import java.time.LocalDate;
import java.time.LocalDateTime;

/***
 *
 * @Auther: MuYun
 * @Date: 2022/4/8 16:40
 * @Description： 注册Sa-Token的注解拦截器，打开注解式鉴权功能
 *
 */
@Configuration
public class SaTokenConfig implements WebMvcConfigurer {

    private static Logger logger= LoggerFactory.getLogger(SaTokenConfig.class);

    public static void main(String[] args) {
        String createtime="2022-05-17";
        String[] split = createtime.split("-");
        logger.info("{}",split[0]);
        logger.info("{}",split[1]);
        logger.info("{}",split[2]);

        LocalDate now = LocalDate.now();



        String mdPassword = SaSecureUtil.md5BySalt("123456", "user");
        System.out.println(mdPassword);
    }

    // 注册Sa-Token的拦截器
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        // 注册注解拦截器，并排除不需要注解鉴权的接口地址 (与登录拦截器无关)
        registry.addInterceptor(new SaAnnotationInterceptor()).addPathPatterns("/**");

        // 注册路由拦截器，自定义认证规则
        registry.addInterceptor(new SaRouteInterceptor((req, res, handler) -> {

            // 登录认证 -- 拦截所有路由，并排除/user/doLogin 用于开放登录
            /*SaRouter.match("/**", "/login", r -> StpUtil.checkLogin());
            SaRouter.match("/**", "/unauthorized", r -> StpUtil.checkLogin());*/

            // 角色认证 -- 拦截以 admin 开头的路由，必须具备 admin 角色或者 super-admin 角色才可以通过认证
            //SaRouter.match("/admin/**", r -> StpUtil.checkRoleOr("user", "admin"));

            // 权限认证 -- 不同模块认证不同权限
            //user或admin都可进入
            SaRouter.match("/admin/**", r -> StpUtil.checkPermissionOr("user","admin"));
            SaRouter.match("/admin/deleteBlackIp", r -> StpUtil.checkPermission("admin"));
            SaRouter.match("/admin/deleteBlogType", r -> StpUtil.checkPermission("admin"));
            SaRouter.match("/admin/deletePic", r -> StpUtil.checkPermission("admin"));
            SaRouter.match("/admin/deleteLinks", r -> StpUtil.checkPermission("admin"));
            SaRouter.match("/admin/deleteResource", r -> StpUtil.checkPermission("admin"));
            SaRouter.match("/admin/addBlog", r -> StpUtil.checkPermission("admin"));
            SaRouter.match("/admin/updateBlog", r -> StpUtil.checkPermission("admin"));
            // 甚至你可以随意的写一个打印语句
            //SaRouter.match("/**", r -> System.out.println("----啦啦啦----"));

            // 连缀写法
            //SaRouter.match("/**").check(r -> System.out.println("----啦啦啦----"));

        })).excludePathPatterns("/admin");
    }
}
